﻿package 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.StageAlign;
	import flash.display.StageQuality;
	import flash.display.StageScaleMode;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	
	import jp.progression.*;
	import jp.progression.casts.*;
	import jp.progression.commands.*;
	import jp.progression.events.*;
	import jp.progression.loader.*;
	import jp.progression.scenes.*;
	
	[SWF(width="800", height="600", frameRate="30", backgroundColor="#FFFFFF")]
	
	/*======================================================================*//**
	 * Preloader
	 */
	public class Preloader extends CastPreloader 
	{
		
		// 背景画像
		[Embed(source="assets/preloader/unload.jpg")]
		private var _baseImageClass:Class;
		private var _baseBitmap:Bitmap;

		// 上書き画像
		[Embed(source="assets/preloader/load.jpg")]
		private var _overlayImageClass:Class;
		private var _overlayBitmap:Bitmap;
		
		// 描写を表示するBitmap
		private var _canvas:Bitmap;
		
		/*======================================================================*//**
		 * コンストラクタ
		 */
		public function Preloader() 
		{
			// 読み込みたい SWF ファイルの URL を設定します。
			url = "Index.swf";
			
			// SWF ファイルの URL の起点を、自身の SWF ファイルが存在するフォルダにするかどうかを指定します。
			useSWFBasePath = false;
		}
		
		/*======================================================================*//**
		 * SWF ファイルの読み込みが完了し、stage 及び loaderInfo にアクセス可能になった場合に送出されます。
		 */
		protected override function _onInit():void 
		{
			// stage の初期設定を行います。
			stage.frameRate=40;
			stage.quality=StageQuality.MEDIUM;
			stage.align=StageAlign.TOP_LEFT;
			stage.scaleMode=StageScaleMode.NO_SCALE;
			
			// 開発者用の出力を有効化
			//Verbose.enabled = true;
			//Verbose.filteringCommand();

			_baseBitmap = new _baseImageClass();
			_overlayBitmap = new _overlayImageClass();

			// 描写を表示するBitmapを作成
			var canvasBitmapData:BitmapData = new BitmapData(_baseBitmap.width, _baseBitmap.height);
			_canvas = new Bitmap(canvasBitmapData);
			addChild(_canvas);
			_canvas.x = 200;
			_canvas.y = -10;

		}
		
		/*======================================================================*//**
		 * オブジェクトが読み込みを開始した瞬間に送出されます。
		 * このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
		 */
		protected override function _onCastLoadStart():void 
		{
			addCommand(
				// 任意のコマンドを記述してください
				new DoTweener(_canvas, {y:200, time:1})
			);
		}
		
		/*======================================================================*//**
		 * ダウンロード処理を実行中にデータを受信したときに送出されます。
		 */
		protected override function _onProgress():void 
		{
			var _loadCompletedSize:Number = bytesLoaded;
			var _loadTotalSize:Number = bytesTotal;
			
			var canvasBitmapData:BitmapData = _canvas.bitmapData;
			var progress:Number;

			if (isNaN(_loadTotalSize) || _loadTotalSize == 0) progress = 0;
			else progress = _loadCompletedSize / _loadTotalSize;
			var bounds:Number = Math.floor(canvasBitmapData.width * (progress));

			// 背景描画
			canvasBitmapData.copyPixels(_overlayBitmap.bitmapData, new Rectangle(0,0,bounds,_baseBitmap.bitmapData.height), new Point(0, 0));

			// 上書き描画
			canvasBitmapData.copyPixels(_baseBitmap.bitmapData, new Rectangle(bounds, 0, _baseBitmap.bitmapData.width - bounds, _baseBitmap.bitmapData.height), new Point(bounds,0));	
		}
		
		/*======================================================================*//**
		 * オブジェクトが読み込みを完了した瞬間に送出されます。
		 * このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
		 */
		protected override function _onCastLoadComplete():void 
		{
			addCommand(
				// 任意のコマンドを記述してください
				new DoTweener(_canvas, {y:500, alpha:0, time:1}),
				new RemoveChild(this, _canvas)

			);
		}
	}
}








